#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <sys/wait.h>

int main()
{
    // 打开一个文件
    int len = 4096;

    // 创建内存映射区
    void *ptr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
    if(ptr == MAP_FAILED)
    {
        perror("mmap error");
        exit(1);
    }

    // 创建子进程
    pid_t pid = fork();
    if(pid == -1)
    {
        perror("fork error");
        exit(1);
    }
    // 操作效率会高一点
    // 需要考虑数据先后问题
    // 父进程
    if(pid > 0)
    {
        // 写数据
        // sleep(10);
        strcpy((char*)ptr, "你是我儿子吗?");
        // 回收
        wait(NULL);
    }
    else if (pid == 0)
    {
        // 读数据
        printf("%s\n", (char*)ptr);
    }

    
    //printf("%s", (char*)ptr);
    // 关闭映射区
    munmap(ptr, len);
    // close(fd);
    return 0;
}
